/**
 * @User: vitobo
 * @Date: 2024-06-22
 * @Description: 循环队列实现
 */
public class MyCircularQueue {
    private int[] elem;
    public int front; //队头
    public int rear;  //队尾

    public MyCircularQueue(int k){
        elem = new int[k];
    }

    // 入队列
    public boolean enQueue(int value){
        if(isFull()){
            return false;
        }
        elem[rear] = value;
        rear = (rear+1) % elem.length;
        return true;
    }

    // 判满
    public boolean isFull(){
        if((rear+1)%elem.length == front){
            return true;
        }
        return false;
    }

    // 出队列
    public  boolean deQueue(){
        if(isEmpty()){
            return false;
        }
        front = (front+1)%elem.length;
        return true;
    }

    // 判空
    public boolean isEmpty(){
        if(rear == front){
            return true;
        }
        return false;
    }

    // 获取队头元素
    public int Front(){
        if(isEmpty()){
            return -1;
        }
        return elem[front];
    }

    // 获取队尾元素
    public int Rear(){
        if(isEmpty()){
            return -1;
        }
        int index = rear == 0 ? elem.length-1 : rear - 1;
        return elem[index];
    }
}
